1 /*
2 * The Apache Software License, Version 1.1
3 *
4 * Copyright (c) 2002 The Apache Software Foundation. All rights
5 * reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
17 * distribution.
18 *
19 * 3. The end-user documentation included with the redistribution,
20 * if any, must include the following acknowledgment:
21 * "This product includes software developed by the
22 * Apache Software Foundation (http://www.apache.org/)."
23 * Alternately, this acknowledgment may appear in the software itself,
24 * if and wherever such third-party acknowledgments normally appear.
25 *
26 * 4. The names "Apache" and "Apache Software Foundation" must
27 * not be used to endorse or promote products derived from this
28 * software without prior written permission. For written
29 * permission, please contact apache@apache.org.
30 *
31 * 5. Products derived from this software may not be called "Apache",
32 * nor may "Apache" appear in their name, without prior written
33 * permission of the Apache Software Foundation.
34 *
35 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46 * SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This software consists of voluntary contributions made by many
50 * individuals on behalf of the Apache Software Foundation. For more
51 * information on the Apache Software Foundation, please see
52 * <http://www.apache.org/>.
53 */
54 package net.sf.cglib.proxy;
55
56 import net.sf.cglib.CodeGenTestCase;
57 import java.beans.*;
58 import java.lang.reflect.Method;
59 import java.util.*;
60 import junit.framework.*;
61
62 /***
63 * @author Chris Nokleberg
64 * @version $Id: TestMixin.java,v 1.3 2004/01/25 22:28:01 herbyderby Exp $
65 */
66 public class TestMixin extends CodeGenTestCase {
67 public void testSimple() throws Exception {
68 Object obj = Mixin.create(new Class[]{ DI1.class, DI2.class },
69 new Object[]{ new D1(), new D2() });
70 assertTrue(((DI1)obj).herby().equals("D1"));
71 assertTrue(((DI2)obj).derby().equals("D2"));
72 }
73
74 public void testDetermineInterfaces() throws Exception {
75 Object obj = Mixin.create(new Object[]{ new D1(), new D2() });
76 assertTrue(((DI1)obj).herby().equals("D1"));
77 assertTrue(((DI2)obj).derby().equals("D2"));
78 }
79
80 public void testOverride() throws Exception {
81 Object obj = Mixin.create(new Object[]{ new D1(), new D4() });
82 assertTrue(((DI1)obj).herby().equals("D1"));
83 assertTrue(((DI2)obj).derby().equals("D4"));
84 }
85
86 public void testNonOverride() throws Exception {
87 Object obj = Mixin.create(new Object[]{ new D4(), new D1() });
88 assertTrue(((DI1)obj).herby().equals("D4"));
89 assertTrue(((DI2)obj).derby().equals("D4"));
90 }
91
92 public void testSubclass() throws Exception {
93 Object obj = Mixin.create(new Object[]{ new D3(), new D1() });
94 assertTrue(((DI1)obj).herby().equals("D1"));
95 assertTrue(((DI2)obj).derby().equals("D2"));
96 assertTrue(((DI3)obj).extra().equals("D3"));
97 }
98
99 public void testBeans() throws Exception {
100 Object obj = Mixin.createBean(new Object[]{ new DBean1(), new DBean2() });
101 Set getters = getGetters(obj.getClass());
102 assertTrue(getters.size() == 3); // name, age, class
103 assertTrue(getters.contains("name"));
104 assertTrue(getters.contains("age"));
105 assertTrue(!(obj instanceof DI1));
106 }
107
108 public void testEverything() throws Exception {
109 Mixin.Generator gen = new Mixin.Generator();
110 gen.setStyle(Mixin.STYLE_EVERYTHING);
111 gen.setDelegates(new Object[]{ new DBean1(), new DBean2() });
112 Object obj = gen.create();
113 Set getters = getGetters(obj.getClass());
114 assertTrue(getters.size() == 3); // name, age, class
115 assertTrue(obj instanceof DI1);
116 assertTrue(new DBean1().herby().equals(((DI1)obj).herby()));
117 }
118
119 public void testNullDelegates() throws Exception {
120 Mixin.Generator gen = new Mixin.Generator();
121 gen.setStyle(Mixin.STYLE_BEANS);
122 gen.setClasses(new Class[]{ DBean1.class, DBean2.class });
123 Mixin mixin = gen.create();
124 Object obj = mixin.newInstance(new Object[]{ new DBean1(), new DBean2() });
125 }
126
127 private static Set getGetters(Class beanClass) throws Exception {
128 Set getters = new HashSet();
129 PropertyDescriptor[] descriptors =
130 Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
131 for (int i = 0; i < descriptors.length; i++) {
132 if (descriptors[i].getReadMethod() != null) {
133 getters.add(descriptors[i].getName());
134 }
135 }
136 return getters;
137 }
138
139 private static PropertyDescriptor getProperty(Class beanClass, String property) throws Exception {
140 Set getters = new HashSet();
141 PropertyDescriptor[] descriptors =
142 Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
143 for (int i = 0; i < descriptors.length; i++) {
144 if (descriptors[i].getName().equals(property))
145 return descriptors[i];
146 }
147 return null;
148 }
149
150 public TestMixin(String testName) {
151 super(testName);
152 }
153
154 public static void main(String[] args) {
155 junit.textui.TestRunner.run(suite());
156 }
157
158 public static Test suite() {
159 return new TestSuite(TestMixin.class);
160 }
161 }
This page was automatically generated by Maven